import { defineStore } from 'pinia'

// 该接口只有这里会用
interface IUserStore { menuData: IMenuData[], username: string }

// 如果使用 defineStore 传递泛型的方式来实现，是下面的代码
// interface IUserGetter { menus: () => (IMenuData & { children: IMenuData[] })[], [key: string]: () => any }
// export const useUserStore = defineStore<'user', IUserStore, IUserGetter>('user', {
//   state(){
//     return {
//       menuData: [],
//       // 用户名
//       username: ''
//     }
//   },
//   // ...
// }


// 下面是使用简单的方式来对state和getters进行约束
export const useUserStore = defineStore('user', {
  state(): IUserStore {
    return {
      // 菜单数据
      menuData: [],
      // 用户名
      username: ''
    }
  },
  actions: {
    clear() {
      this.menuData = [];
      this.username = "";
      // 如果还有其他需要清理的东西，可以在这里进行清理
    }
  },
  getters: {
    permissions(this: IUserStore) {
      return this.menuData.map(item => item.name)
    }
  }
})
